﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication3
{
    public partial class Categorias : Form
    {
        DataSet dsCategorias = new DataSet();
        string rutaBDBiblioteca = "Data Source=JOHANA-PC;Initial Catalog=Biblioteca;Integrated Security=True";
        CheckBox ChbEst_Cat = new CheckBox();
        BindingManagerBase bmCategorias;

        public Categorias()
        {
            InitializeComponent();
        }

        private void Categorias_Load(object sender, EventArgs e)
        {
            //AgregarTablaDataSetSQLServer(rutaBDBiblioteca, "SELECT * FROM Categorias", "Categorias", ref ds);
            SetearControl();
            SqlConnection cnBiblioteca;
            AccDatBiblioteca datos = new AccDatBiblioteca();

            cnBiblioteca = datos.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = datos.ObtenerAdaptador("Select * From Categorias", cnBiblioteca);

            adp.Fill(dsCategorias, "Categorias");
            cnBiblioteca.Close();

            Grilla_Cat.DataSource = dsCategorias.Tables["Categorias"];
            Grilla_Cat.Refresh();
            TitulosColumnas();

            bmCategorias = BindingContext[dsCategorias, "Categorias"];
            AsociarTextos();
            MostrarPosicion(); 
        }

        private void TitulosColumnas()
        {
            Grilla_Cat.Columns["Cod_Cat"].HeaderText = "CODIGO";
            Grilla_Cat.Columns["Nom_Cat"].HeaderText = "NOMBRE";
            Grilla_Cat.Columns["Est_Cat"].HeaderText = "ESTADO";
        }


        private void ReemplazarControl(Control controlAnterior, Control controlNuevo)
        {
            Point ubicacion;
            Size tamanio;
            ubicacion = controlAnterior.Location;
            tamanio = controlAnterior.Size;
            controlNuevo.Location = ubicacion;
            controlNuevo.Size = tamanio;
            HabilitarControl(controlNuevo, true);
            //controlNuevo.Visible = true;
            //controlNuevo.Enabled = true;
            HabilitarControl(controlAnterior, false);
        }

        private void HabilitarControl(Control ctl, bool estado)
        {
            ctl.Enabled = estado;
            ctl.Visible = estado;
        }


        private void SetearControl()
        {
            ReemplazarControl(TxtEst_Cat, ChbEst_Cat);
            this.Controls.Add(ChbEst_Cat);
            HabilitarControl(TxtEst_Cat, false);
        }

        
        private void AsociarTextos()
        {
            TxtCod_Cat.DataBindings.Add(new Binding("Text", dsCategorias, "Categorias." + dsCategorias.Tables["Categorias"].Columns[0].ColumnName.ToString()));
            TxtNom_Cat.DataBindings.Add(new Binding("Text", dsCategorias, "Categorias." + dsCategorias.Tables["Categorias"].Columns[1].ColumnName.ToString()));
            ChbEst_Cat.DataBindings.Add(new Binding("Checked", dsCategorias, "Categorias." + dsCategorias.Tables["Categorias"].Columns[2].ColumnName.ToString()));
        }

        private void MostrarPosicion()
        {
            //Total Registros
            int iTotal = bmCategorias.Count;
            //Numero (1, 2, ....) de registro
            int iPos;

            if (iTotal == 0)
                LblPosicion.Text = "No Registros";
            else
            {
                iPos = bmCategorias.Position + 1;
                //Mostrar informacion en la etiqueta
                LblPosicion.Text = iPos.ToString() + " de " + iTotal.ToString();
            }
        }

        private void BtnPrimero_Click(object sender, EventArgs e)
        {
            bmCategorias.Position = 0;
            MostrarPosicion();
        }

        private void BtnAnterior_Click(object sender, EventArgs e)
        {
            bmCategorias.Position -= 1;
            MostrarPosicion();
        }

        private void BtnSiguiente_Click(object sender, EventArgs e)
        {
            bmCategorias.Position += 1;
            MostrarPosicion();
        }

        private void BtnUltimo_Click(object sender, EventArgs e)
        {
            bmCategorias.Position = bmCategorias.Count - 1;
            MostrarPosicion();
        }

        private void BtnAñadir_Click(object sender, EventArgs e)
        {
             DataTable Autores = dsCategorias.Tables["Categorias"];
            DataRowCollection cfilas = Autores.Rows;
            DataRow nuevaFila;
            try
            {
                nuevaFila = Autores.NewRow();
                // Datos por omisión para las columnas de la nueva fila
                nuevaFila[0] = "Código";
                nuevaFila[1] = "Nombre";
                nuevaFila[2] = true;
                cfilas.Add(nuevaFila);
                BtnUltimo.PerformClick();
                MostrarPosicion();
                LblResultado.Text = "";
                TxtCod_Cat.Enabled = true;
                TxtCod_Cat.Focus();
            }
            catch (ConstraintException ex)
            {
                // Capturar posible error por clave duplicada
                MessageBox.Show(ex.Message);
            }
        }

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            GestCategoria GCategoria = new GestCategoria();
            if (GCategoria.ExisteCategoria(TxtCod_Cat.Text, rutaBDBiblioteca))
                LblResultado.Text = "Categoria Existente";
            else
            {
                CCategoria NuevaCategoria = 
                     new CCategoria(TxtCod_Cat.Text, TxtNom_Cat.Text, ChbEst_Cat.Checked);
                if (!GCategoria.GrabarCategoria(NuevaCategoria, rutaBDBiblioteca))
                    LblResultado.Text = "Error en el registro de la Categoria";
                else
                {
                    LblResultado.Text = "Categoria Guardado";
                }
            }
        }

        private void BtnBorrar_Click(object sender, EventArgs e)
        {
            GestCategoria GCategoria = new GestCategoria();
            CCategoria EliminarCategoria =
                     new CCategoria(TxtCod_Cat.Text, TxtNom_Cat.Text, ChbEst_Cat.Checked = false);

            if (GCategoria.EliminarCategoria(EliminarCategoria, rutaBDBiblioteca))
            {
                LblResultado.Text = "Categoria Eliminada";
                bmCategorias.Position -= 1; //muestra el registro anterior
                MostrarPosicion();
            }
            else
                LblResultado.Text = "Categoria no Eliminada";
        }

        private void BtnModificar_Click(object sender, EventArgs e)
        {
            GestCategoria GCategoria = new GestCategoria();
            CCategoria ModificarCategoria = new CCategoria(TxtCod_Cat.Text, TxtNom_Cat.Text, ChbEst_Cat.Checked);
            if (GCategoria.ModificarAutor(ModificarCategoria, rutaBDBiblioteca))
            {
                LblResultado.Text = "Categoria Modificada";
            }
            else
                LblResultado.Text = "Categoria no Modificada";
        }

        private void BtnActualizar_Click(object sender, EventArgs e)
        {
            dsCategorias.Tables.Clear();
            SqlConnection cnBiblioteca;

            AccDatBiblioteca AccDatBiblioteca = new AccDatBiblioteca();

            cnBiblioteca = AccDatBiblioteca.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = AccDatBiblioteca.ObtenerAdaptador("SELECT * FROM Categorias", cnBiblioteca);

            adp.Fill(dsCategorias, "Categorias");
            cnBiblioteca.Close();
            Grilla_Cat.DataSource = dsCategorias.Tables["Categorias"];
            bmCategorias = BindingContext[dsCategorias, "Categorias"];
            bmCategorias.Position = bmCategorias.Count - 1;
            MostrarPosicion();
            LblResultado.Text = "";
            TxtCod_Cat.Enabled = false;
            TxtCod_Cat.Focus();
        }

        
        private void TxtCod_Cat_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                  else
                        if (Char.IsDigit(e.KeyChar))
                            e.Handled = false;
                        else
                            e.Handled = true;
        }

        private void TxtNom_Cat_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else if (Char.IsSeparator(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtCod_Cat_Validating(object sender, CancelEventArgs e)
        {
            if (TxtCod_Cat.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtCod_Cat, "Ingrese el Codigo de la Categoria");
            }
            else
                errorProvider1.SetError(TxtCod_Cat, null);
        }

        private void TxtNom_Cat_Validating(object sender, CancelEventArgs e)
        {
            if (TxtNom_Cat.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtNom_Cat, "Ingrese Nombre de la Categoria");
            }
            else
                errorProvider1.SetError(TxtNom_Cat, null);
        }

        private void BtnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
